home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / icmusicdisk.lha / menu3.s < prev   
Encoding:
Text File  |  1987-10-01  |  22.2 KB  |  1,394 lines

  1.     section andy,code_c
  2.     opt c-,d+
  3.  
  4.     jmp    starts
  5.  
  6. stp    equ    255
  7.  
  8. Title:    dc.b    'up your ring vol.1',0            ;Title of album
  9.  
  10. Number:    dc.l    13                ;number of tunes upto 16
  11.  
  12.     * Names to be seen on screen
  13.  
  14. nam1:    dc.b    'music2',0
  15. nam2:    dc.b    'rearended',0
  16. nam3:    dc.b    'nightly thrustings',0
  17. nam4:    dc.b    'art forgery 2',0
  18. nam5:    dc.b    'guitariffola',0
  19. nam6:    dc.b    'pukeydook',0
  20. nam7:    dc.b    'throbbing bulge',0
  21. nam8:    dc.b    'throbbing high',0
  22. nam9:    dc.b    'blueveiner',0
  23. nam10:    dc.b    'deep cleavage',0
  24. nam11:    dc.b    'boner',0
  25. nam12:    dc.b    'horizontal jogging',0
  26. nam13:    dc.b    'ghostbusters',0
  27. nam14:    dc.b    ' ',0
  28. nam15:    dc.b    ' ',0
  29. nam16:    dc.b    ' ',0
  30.  
  31.     * Filenames on the disk
  32.  
  33. dnam1:    dc.b    'music2',0
  34. dnam2:    dc.b    'rearended',0
  35. dnam3:    dc.b    'nightly',0
  36. dnam4:    dc.b    'art2',0
  37. dnam5:    dc.b    'guitariffola',0
  38. dnam6:    dc.b    'pukeydook',0
  39. dnam7:    dc.b    'throbbing',0
  40. dnam8:    dc.b    'throbhigh',0
  41. dnam9:    dc.b    'blueveiner',0
  42. dnam10:    dc.b    'deepcleavage',0
  43. dnam11:    dc.b    'boner',0
  44. dnam12:    dc.b    'horizontal',0
  45. dnam13:    dc.b    'ghostbusters',0
  46. dnam14:    dc.b    '',0
  47. dnam15:    dc.b    '',0
  48. dnam16:    dc.b    '',0
  49.  
  50. loadtext:
  51.     dc.b    16,29,'loading',0
  52. decomtext:
  53.     dc.b    14,29,'decrunching    ',0
  54. clrtext:
  55.     dc.b    14,29,'               ',0
  56. message:
  57.     dc.b    '  ANDY WAS ERE, SO WHAT ARE YOU GOING TO DO ABOUT IT??....     ',stp,0
  58.  
  59.     even
  60.  
  61. namlist:    
  62.     dc.l    nam1,nam2,nam3,nam4,nam5,nam6,nam7,nam8,nam9,nam10,nam11,nam12,nam13,nam14,nam15,nam16
  63. dnamlist:    
  64.     dc.l    dnam1,dnam2,dnam3,dnam4,dnam5,dnam6,dnam7,dnam8,dnam9,dnam10,dnam11,dnam12,dnam13,dnam14,dnam15,dnam16
  65.  
  66.     *************************
  67.     * Setup V2.1 Rev.3/3/90 *
  68.     *************************
  69.  
  70. startlist1    equ    38
  71. startlist2    equ    50
  72.  
  73. plnw        equ    40
  74. plnh        equ    300
  75. plnsize        equ    plnw*plnh
  76. plnnum        equ    1
  77. plndata        equ    plnsize*plnnum
  78.  
  79. starts:
  80.     move.l    $4,a6
  81.     lea    dosname,a1
  82.     jsr    -552(a6)
  83.     move.l    d0,dosbase
  84.     beq    error
  85.  
  86.     move.l    4,a6
  87.     move.l    #$10002,d1
  88.     move.l    #plndata,d0
  89.     jsr    -198(a6)
  90.     cmp.l    #$00,d0
  91.     beq    error
  92.     move.l    d0,plnbase
  93.  
  94.     move.l    4,a6
  95.     move.l    #gfxname,a1
  96.     moveq.l    #0,d0
  97.     jsr    -552(a6)
  98.     move.l    d0,gfxbase
  99.  
  100.     moveq.l    #0,d0            ;do title
  101.     lea    title,a0
  102.     lea    toptext+2,a1
  103.     
  104. .lp:    add.l    #1,d0
  105.     move.b    (a0)+,(a1)+
  106.     bne    .lp
  107.  
  108.     move.l    #40,d1
  109.     sub.l    d0,d1
  110.     lsr.l    #1,d1
  111.  
  112.     move.b    d1,toptext
  113.  
  114.     MOVE.W    #$0080,$dff096
  115.     move.w    $dff01c,sysint
  116.     or.w    #$c000,sysint
  117.     move.w    #$7fff,$dff09a
  118.     move.w    #$c02f,$dff09a
  119.     move.l    $6c,intsave
  120.     move.l    #newcopper,$dff080
  121.     clr.w    $dff088
  122.     move.w    #$8480,$dff096    
  123.     move.l    plnbase,a1
  124.     move.l    #plnsize,d0
  125.     move.l    a1,stor
  126.     move.l    stor,pln1
  127.     move.w    stor,bp1+2
  128.     move.w    stor+2,bp1+6
  129.     add.l    d0,stor
  130.     move.l    stor,pln2
  131.     move.w    stor,bp2+2
  132.     move.w    stor+2,bp2+6
  133.  
  134.     jsr    getnames
  135.  
  136.     lea    toptext,a0
  137.     jsr    print    
  138.  
  139.     move.w    #0,$dff180
  140.     move.l    #isr,$6c
  141.  
  142. wait:    jsr    task            ;jmp to our sub.
  143.     btst    #6,$bfe001        ;wait for mouse.
  144.     bne    wait
  145.     move.l    gfxbase,a4
  146.     move.l    startlist1(a4),$dff080
  147.     move.l    startlist2(a4),$dff084
  148.     clr.w    $dff088    
  149.     move.l    intsave,$6c
  150.     move.w    sysint,$dff09a
  151.     move.w    #$8080,$dff096
  152.     move.w    #$0400,$dff096
  153.     move.l    4,a6
  154.     move.l    plnbase,a1
  155.     move.l    #plndata,d0
  156.     jsr    -210(a6)
  157.     move.l    gfxbase,a1
  158.     jsr    -414(a6)
  159.  
  160.     jsr    stop
  161.  
  162. error:    move.w    #$0fff,$dff180
  163.     rts                ;exit.
  164.  
  165. newcopper:                    
  166.     dc.w    $0100,$1200
  167. scrl:    dc.w    $0102,$0000
  168.  
  169. bp1:    dc.w    $00e0,$0100,$00e2,$0000
  170. bp2:    dc.w    $00e4,$0100,$00e6,$0000
  171. bp3:    dc.w    $00e8,$0100,$00ea,$0000
  172. bp4:    dc.w    $00ec,$0100,$00ee,$0000
  173. bp5:    dc.w    $00f0,$0100,$00f2,$0000
  174.  
  175.     dc.w    $008E,$2c81,$0090,$2cb9                                 
  176.     dc.w    $0092,$0038,$0094,$00d0
  177. mod:    dc.w    $0108,$0000,$010a,$0000
  178.  
  179. sp0:    dc.w    $0120,$fffe,$0122,$0000    
  180.     dc.w    $0124,$fffe,$0126,$0000    
  181.     dc.w    $0128,$fffe,$012a,$0000    
  182.     dc.w    $012c,$fffe,$012e,$0000    
  183.     dc.w    $0130,$fffe,$0132,$0000    
  184.     dc.w    $0134,$fffe,$0136,$0000    
  185.     dc.w    $0138,$fffe,$013a,$0000    
  186.     dc.w    $013c,$fffe,$013e,$0000    
  187.  
  188.     dc.w    $0180,$0000
  189.  
  190.     dc.w    $3f01,$fffe,$0180,$0f00    
  191.     dc.w    $3c01,$fffe,$0180,$0c00    
  192.     dc.w    $3801,$fffe,$0180,$0800    
  193.     dc.w    $3401,$fffe,$0180,$0400    
  194.  
  195.     dc.w    $3501,$fffe,$0180,$0000
  196.  
  197.     dc.w    $2401,$fffe,$0180,$0004    
  198.     dc.w    $4001,$fffe,$0180,$0008    
  199.     dc.w    $4101,$fffe,$0180,$000c    
  200.     dc.w    $4201,$fffe,$0180,$000f    
  201.  
  202.     dc.w    $3301,$fffe,$0180,$0006    
  203.  
  204. barstrt:dc.w    $2421,$fffe,$0182,$0faf
  205.     dc.w    $2521,$fffe,$0182,$0fcf
  206.     dc.w    $2621,$fffe,$0182,$0fff
  207.     dc.w    $2721,$fffe,$0182,$0fcf
  208.     dc.w    $2821,$fffe,$0182,$0faf
  209.  
  210. barstop:dc.w    $6901,$fffe,$0182,$0fff
  211.     
  212.  
  213.  
  214.     dc.w    $9401,$fffe,$0180,$001e    
  215.     dc.w    $9501,$fffe,$0180,$001a    
  216.     dc.w    $9601,$fffe,$0180,$0016    
  217.     dc.w    $9701,$fffe,$0180,$0012    
  218.  
  219.     dc.w    $9801,$fffe,$0180,$0100
  220.  
  221. bar1:    
  222.     dc.w    $b021,$fffe,$0180,$0444
  223.     dc.w    $b031,$fffe,$0180,$0044
  224.     dc.w    $b039,$fffe,$0180,$0000
  225.  
  226.     dc.w    $b121,$fffe,$0180,$0888
  227.     dc.w    $b131,$fffe,$0180,$0088
  228.     dc.w    $b139,$fffe,$0180,$0000
  229.  
  230.     dc.w    $b221,$fffe,$0180,$0bbb
  231.     dc.w    $b231,$fffe,$0180,$00bb
  232.     dc.w    $b239,$fffe,$0180,$0000
  233.  
  234.     dc.w    $b321,$fffe,$0180,$0ddd
  235.     dc.w    $b331,$fffe,$0180,$00dd
  236.     dc.w    $b339,$fffe,$0180,$0000
  237.  
  238.     dc.w    $b421,$fffe,$0180,$0bbb
  239.     dc.w    $b431,$fffe,$0180,$00bb
  240.     dc.w    $b439,$fffe,$0180,$0000
  241.  
  242.     dc.w    $b521,$fffe,$0180,$0888
  243.     dc.w    $b531,$fffe,$0180,$0088
  244.     dc.w    $b539,$fffe,$0180,$0000
  245.  
  246.     dc.w    $b621,$fffe,$0180,$0444
  247.     dc.w    $b631,$fffe,$0180,$0044
  248.     dc.w    $b639,$fffe,$0180,$0000
  249.  
  250. bar2:    
  251.     dc.w    $b821,$fffe,$0180,$0444
  252.     dc.w    $b831,$fffe,$0180,$0044
  253.     dc.w    $b839,$fffe,$0180,$0000
  254.  
  255.     dc.w    $b921,$fffe,$0180,$0888
  256.     dc.w    $b931,$fffe,$0180,$0088
  257.     dc.w    $b939,$fffe,$0180,$0000
  258.  
  259.     dc.w    $ba21,$fffe,$0180,$0bbb
  260.     dc.w    $ba31,$fffe,$0180,$00bb
  261.     dc.w    $ba39,$fffe,$0180,$0000
  262.  
  263.     dc.w    $bb21,$fffe,$0180,$0ddd
  264.     dc.w    $bb31,$fffe,$0180,$00dd
  265.     dc.w    $bb39,$fffe,$0180,$0000
  266.  
  267.     dc.w    $bc21,$fffe,$0180,$0bbb
  268.     dc.w    $bc31,$fffe,$0180,$00bb
  269.     dc.w    $bc39,$fffe,$0180,$0000
  270.  
  271.     dc.w    $bd21,$fffe,$0180,$0888
  272.     dc.w    $bd31,$fffe,$0180,$0088
  273.     dc.w    $bd39,$fffe,$0180,$0000
  274.  
  275.     dc.w    $be21,$fffe,$0180,$0444
  276.     dc.w    $be31,$fffe,$0180,$0044
  277.     dc.w    $be39,$fffe,$0180,$0000
  278.  
  279. bar3:    
  280.     dc.w    $c021,$fffe,$0180,$0444
  281.     dc.w    $c031,$fffe,$0180,$0044
  282.     dc.w    $c039,$fffe,$0180,$0000
  283.  
  284.     dc.w    $c121,$fffe,$0180,$0888
  285.     dc.w    $c131,$fffe,$0180,$0088
  286.     dc.w    $c139,$fffe,$0180,$0000
  287.  
  288.     dc.w    $c221,$fffe,$0180,$0bbb
  289.     dc.w    $c231,$fffe,$0180,$00bb
  290.     dc.w    $c239,$fffe,$0180,$0000
  291.  
  292.     dc.w    $c321,$fffe,$0180,$0ddd
  293.     dc.w    $c331,$fffe,$0180,$00dd
  294.     dc.w    $c339,$fffe,$0180,$0000
  295.  
  296.     dc.w    $c421,$fffe,$0180,$0bbb
  297.     dc.w    $c431,$fffe,$0180,$00bb
  298.     dc.w    $c439,$fffe,$0180,$0000
  299.  
  300.     dc.w    $c521,$fffe,$0180,$0888
  301.     dc.w    $c531,$fffe,$0180,$0088
  302.     dc.w    $c539,$fffe,$0180,$0000
  303.  
  304.     dc.w    $c621,$fffe,$0180,$0444
  305.     dc.w    $c631,$fffe,$0180,$0044
  306.     dc.w    $c639,$fffe,$0180,$0000
  307.  
  308. bar4:    
  309.     dc.w    $c821,$fffe,$0180,$0444
  310.     dc.w    $c831,$fffe,$0180,$0044
  311.     dc.w    $c839,$fffe,$0180,$0000
  312.  
  313.     dc.w    $c921,$fffe,$0180,$0888
  314.     dc.w    $c931,$fffe,$0180,$0088
  315.     dc.w    $c939,$fffe,$0180,$0000
  316.  
  317.     dc.w    $ca21,$fffe,$0180,$0bbb
  318.     dc.w    $ca31,$fffe,$0180,$00bb
  319.     dc.w    $ca39,$fffe,$0180,$0000
  320.  
  321.     dc.w    $cb21,$fffe,$0180,$0ddd
  322.     dc.w    $cb31,$fffe,$0180,$00dd
  323.     dc.w    $cb39,$fffe,$0180,$0000
  324.  
  325.     dc.w    $cc21,$fffe,$0180,$0bbb
  326.     dc.w    $cc31,$fffe,$0180,$00bb
  327.     dc.w    $cc39,$fffe,$0180,$0000
  328.  
  329.     dc.w    $cd21,$fffe,$0180,$0888
  330.     dc.w    $cd31,$fffe,$0180,$0088
  331.     dc.w    $cd39,$fffe,$0180,$0000
  332.  
  333.     dc.w    $ce21,$fffe,$0180,$0444
  334.     dc.w    $ce31,$fffe,$0180,$0044
  335.     dc.w    $ce39,$fffe,$0180,$0000
  336.     
  337.  
  338.  
  339.     dc.w    $ffdf,$fffe
  340.  
  341.  
  342.     dc.w    $1601,$fffe,$0182,$01f0
  343.     dc.w    $1701,$fffe,$0182,$01e0
  344.     dc.w    $1801,$fffe,$0182,$01a0
  345.     dc.w    $1901,$fffe,$0182,$0180
  346.  
  347.  
  348.     dc.w    $0108,-80
  349.     dc.w    $010a,-80
  350.     
  351.     dc.w    $ff01,$fffe
  352.         dc.w    $0108,$0000
  353.     dc.w    $010a,$0000
  354.     
  355.     dc.w    $ffff,$fffe
  356.     
  357. gfxname:dc.b    'graphics.library',0
  358.     even
  359. gfxbase:dc.l    0
  360.  
  361. stor:    dc.l    0
  362. pln1:    dc.l    0
  363. pln2:    dc.l    0
  364. pln3:    dc.l    0
  365. pln4:    dc.l    0
  366. pln5:    dc.l    0
  367. sysint:    dc.w    0
  368. intsave:dc.l    0
  369. plnbase:dc.l    0
  370. barpos:    dc.l    0
  371. barcol:    dc.l    0
  372. song:    dc.l    0
  373.  
  374. toptext:
  375.     dc.b    0,0,'                                         ',0
  376.  
  377.  
  378. isr:    movem.l    d0-d7/a0-a6,-(sp)
  379.     move.w    #$0020,$dff09c
  380.     movem.l    (sp)+,d0-d7/a0-a6
  381.     rte
  382.  
  383. task:    move.w    $dff006,d0
  384.     and.w    #$ff00,d0
  385.     cmp.w    #$af00,d0
  386.     bne    task
  387.     ;move.w    #$000f,$dff09a
  388.     jsr    getkey
  389.     jsr    drawbar
  390.     jsr    scroller
  391.     tst.l    song
  392.     beq    .lp
  393.     jsr    replay
  394.     jsr    dospec
  395.     jsr    docbars
  396.     jsr    dokey
  397.     rts
  398. .lp:    move.w    #-1,mt_aud1temp
  399.     move.w    #-1,mt_aud2temp
  400.     move.w    #-1,mt_aud3temp
  401.     move.w    #-1,mt_aud4temp
  402.     jsr    dospec
  403.     jsr    docbars
  404.     ;move.w    #$c00f,$dff09a
  405.     jsr    dokey
  406.     rts
  407.  
  408. Drawbar:
  409.     move.l    barpos,d0
  410.     mulu    #6,d0
  411.     add.l    #$44,d0
  412.     move.b    d0,barstrt
  413.     add.l    #1,d0
  414.     move.b    d0,barstrt+8
  415.     add.l    #1,d0
  416.     move.b    d0,barstrt+16
  417.     add.l    #1,d0
  418.     move.b    d0,barstrt+24
  419.     add.l    #1,d0
  420.     move.b    d0,barstrt+32
  421.     add.l    #1,d0
  422.     move.b    d0,barstop
  423.  
  424.     rts
  425.  
  426. dokey:    
  427.     cmp.b    #$67,keyread
  428.     beq    up
  429.     cmp.b    #$65,keyread
  430.     beq    down
  431.     cmp.b    #$77,keyread
  432.     beq    return
  433.     rts
  434. up:    tst.l    barpos
  435.     beq    .lp
  436.     sub.l    #1,barpos
  437. .lp:    
  438.     rts
  439.  
  440. down:    move.l    number,d0
  441.     sub.l    #1,d0
  442.     cmp.l    barpos,d0
  443.     beq    .lp
  444.     add.l    #1,barpos
  445. .lp:    rts
  446. return:    
  447.     move.l    intsave,$6c
  448.     move.w    sysint,$dff09a
  449.     lea    dnamlist,a0
  450.     move.l    barpos,d0
  451.     asl.l    #2,d0
  452.     add.l    d0,a0
  453.     move.l    (a0),a0
  454.     lea    loadname,a1
  455. .lp:    move.b    (a0)+,(a1)+
  456.     bne    .lp
  457.     tst.l    song
  458.     beq    .lp2
  459.     jsr    stop
  460. .lp2:    lea    loadtext,a0
  461.     jsr    print
  462.     jsr    load
  463.     tst.l    d0
  464.     bne    .lp3
  465.     move.l    #1,song
  466.     lea    decomtext,a0
  467.     jsr    print
  468.     jsr    decomp
  469.     lea    clrtext,a0
  470.     jsr    print
  471.     jsr    start
  472. .lp3:    move.w    #$7fff,$dff09a
  473.     move.l    #isr,$6c
  474.     move.w    #$c02f,$dff09a
  475.     rts        
  476.  
  477. getnames:
  478.     move.l    number,d0
  479.     sub.l    #1,d0
  480.     lea    namlist,a0
  481.     move.l    #4,d1
  482.  
  483. .lp2:    move.b    d1,namtxt+1
  484.     move.l    (a0)+,a1
  485.     lea    namtxt+2,a2
  486.     moveq.l    #0,d2
  487.  
  488. .lp:    add.l    #1,d2
  489.     move.b    (a1)+,(a2)+
  490.     bne    .lp    
  491.  
  492.     move.l    #40,d3
  493.     sub.l    d2,d3
  494.  
  495.     lsr.l    #1,d3
  496.     move.b    d3,namtxt    
  497.     
  498.     movem.l    d0-d7/a0-a6,-(sp)
  499.     lea    namtxt,a0
  500.     jsr    print
  501.     movem.l    (sp)+,d0-d7/a0-a6
  502.     
  503.     add.l    #1,d1
  504.  
  505.     dbra    d0,.lp2
  506.     rts
  507.  
  508. namtxt:ds.b    42
  509.  
  510.     *****************************
  511.     *Note:-                   *
  512.     * A-Obj                   *
  513.     * B-Msk                     *
  514.     * C-Bck                     *
  515.     * D-Bck                     *
  516.     * M-00001111 10111000       *
  517.     *****************************
  518.  
  519.     ******************************
  520.     *Char string print grey chars
  521.     *chars 1 bp,528 pix w,66 chars 
  522.     *screen width equ #40b
  523.     *a0 text string x,y
  524.     *pln num in a6
  525.     *255 cr,0 termination
  526.     *d7,d6
  527.     *a0,a5,a6
  528.     ******************************
  529. Print:    
  530.     move.l    pln1,a6
  531.     moveq.l    #0,d7
  532.     moveq.l    #0,d6
  533.     move.b    (a0)+,d7    ;get x
  534.     add.l    d7,a6
  535.     move.b    (a0)+,d7    ;get y
  536.     mulu.w    #40*6,d7
  537.     add.l    d7,a6        ;a6 strt addr
  538.     ;add.l    #120,a6
  539.  
  540. prchr2:    moveq.l    #0,d7
  541.     lea    chars,a5
  542.     move.b    (a0)+,d7    ;get char
  543.     beq    prend2
  544.     bmi    print
  545.     sub.b    #32,d7
  546.     btst.l    #6,d7
  547.     beq    notlo2
  548.     sub.b    #32,d7
  549. notlo2:    add.l    d7,a5
  550.     
  551.     move.b    (a5),(a6)
  552.     
  553.     move.b    66(a5),40(a6)
  554.  
  555.     move.b    132(a5),80(a6)
  556.  
  557.     move.b    198(a5),120(a6)
  558.     
  559.     move.b    264(a5),160(a6)
  560.     
  561.     move.b    330(a5),200(a6)
  562.     add.l    #1,a6
  563.     bra    prchr2
  564. prend2:    rts    
  565. chars:    incbin    'context'
  566.     even
  567.  
  568.     **************************
  569.     *Read keyboard & auto repeat
  570.     *key in keyread.b
  571.     *d0
  572.     **************************
  573.  
  574. Getkey:    add.l    #1,slow
  575.     and.l    #1,slow
  576.     btst.b    #0,slow+3
  577.     beq    nokeys
  578.     cmp.b    #0,keyrep
  579.     beq    tstkey
  580.     move.b    keypress,d0
  581.     cmp.b    $bfec01,d0
  582.     beq    subrep
  583. newkey:    move.b    $bfec01,keypress
  584.     move.b    $bfec01,keyread
  585.     move.b    #4,keyrep
  586.     rts
  587. subrep:    sub.b    #1,keyrep
  588.     move.b    #0,keyread
  589.     rts
  590. tstkey:    move.b    keypress,d0
  591.     cmp.b    $bfec01,d0
  592.     bne    newkey
  593.     move.b    $bfec01,keyread
  594.     rts    
  595. nokeys:
  596.     move.b    #0,keyread
  597.     rts
  598.  
  599. keyread:
  600.     dc.l    0
  601. slow:    dc.l    0
  602. keyrep:    dc.l    0
  603. keypress:
  604.     dc.l    0
  605.     even
  606.  
  607.  
  608. Decomp:    
  609.     move.l    songlen,d0        ;length
  610.     move.l    #BUFFER,a1
  611.     move.l    #DATA,a0
  612.     move.l    a0,a2
  613.     add.l    d0,a2
  614. next_byte:
  615.     move.b    (a1)+,d0        ;get command byte
  616.     tst.b    d0            ;if plus string decompress
  617.     bpl    str_dec
  618.  
  619. more_mult:
  620.     move.b    (a1),(a0)+        ;write multi byte
  621.  
  622.     ;move.w    #$0f00,$dff180
  623.  
  624.     cmp.l    a2,a0            ;chk last byte
  625.     beq    last_dec
  626.  
  627.     add.b    #1,d0            ;any more?
  628.     bmi    more_mult
  629.     add.l    #1,a1            ;goto next command byte
  630.     bra    next_byte
  631.  
  632. str_dec:
  633.     move.b    (a1)+,(a0)+        ;write next byte string
  634.  
  635.     ;move.w    #$00f0,$dff180
  636.  
  637.     cmp.l    a2,a0            ;chk last byte
  638.     beq    last_dec        
  639.  
  640.     sub.b    #1,d0
  641.     bpl    str_dec            ;any more?
  642.     bra    next_byte
  643.  
  644. last_dec
  645.     rts
  646.  
  647. load:    
  648.     move.l    #1005,d2
  649.     bsr    openfile
  650.     beq    derror
  651.     bsr    read
  652.     bsr    closefile
  653.     moveq.l    #0,d0
  654.     rts
  655. derror:    move.l    #-1,d0
  656.     rts
  657. openfile:
  658.     move.l    dosbase,a6
  659.     move.l    #loadname,d1
  660.     jsr    -30(a6)
  661.     move.l    d0,filehd
  662.     rts
  663. closefile:
  664.     move.l    dosbase,a6
  665.     move.l    filehd,d1
  666.     jsr    -36(a6)
  667.     rts
  668. read:    move.l    dosbase,a6
  669.     move.l    filehd,d1
  670.     move.l    #songlen,d2    ;start addr
  671.     move.l    #$3ffff,d3    ;length
  672.     jsr    -42(a6)
  673.     rts    
  674.  
  675. filehd:    dc.l    0
  676. dosbase:dc.l    0
  677. dosname:dc.b    "dos.library",0
  678.     even
  679.  
  680. songlen:dc.l    0
  681. buffer:    ds.b    150*1024
  682. data:    ds.b    150*1024
  683.  
  684.  
  685. loadname:
  686.     dc.b    '                               ',0        ;new filename
  687.  
  688. ; -----------------------------------------------
  689. ; ------- Soundtracker V2.4 - playroutine -------
  690. ; -----------------------------------------------
  691.  
  692. ; call 'mt_init' to initialize the playroutine
  693.  
  694. start:    lea    data,a0
  695.     add.l    #$03b8,a0
  696.     moveq    #$7f,d0
  697.     moveq    #0,d1
  698. mt_init1:
  699.     move.l    d1,d2
  700.     subq.w    #1,d0
  701. mt_init2:
  702.     move.b    (a0)+,d1
  703.     cmp.b    d2,d1
  704.     bgt.s    mt_init1
  705.     dbf    d0,mt_init2
  706.     addq.b    #1,d2
  707.  
  708. mt_init3:
  709.     lea    data,a0
  710.     lea    mt_sample1(pc),a1
  711.     asl.l    #8,d2
  712.     asl.l    #2,d2
  713.     add.l    #$438,d2
  714.     add.l    a0,d2
  715.     moveq    #$1e,d0
  716. mt_init4:
  717.     move.l    d2,(a1)+
  718.     moveq    #0,d1
  719.     move.w    42(a0),d1
  720.     asl.l    #1,d1
  721.     add.l    d1,d2
  722.     add.l    #$1e,a0
  723.     dbf    d0,mt_init4
  724.  
  725.     lea    mt_sample1(PC),a0
  726.     moveq    #0,d0
  727. mt_clear:
  728.     move.l    (a0,d0.w),a1
  729.     clr.l    (a1)
  730.     addq.w    #4,d0
  731.     cmp.w    #$7c,d0
  732.     bne.s    mt_clear
  733.  
  734.     clr.w    $dff0a8
  735.     clr.w    $dff0b8
  736.     clr.w    $dff0c8
  737.     clr.w    $dff0d8
  738.     clr.l    mt_partnrplay
  739.     clr.l    mt_partnote
  740.     clr.l    mt_partpoint
  741.  
  742.     move.b    data+$3b6,mt_maxpart+1
  743.     rts
  744.  
  745. ; call 'mt_end' to switch the sound off
  746.  
  747. stop:    clr.w    $dff0a8
  748.     clr.w    $dff0b8
  749.     clr.w    $dff0c8
  750.     clr.w    $dff0d8
  751.     move.w    #$f,$dff096
  752.     rts
  753.  
  754. ; the playroutine - call this every frame
  755.  
  756. replay:
  757.     addq.w    #1,mt_counter
  758. mt_cool:cmp.w    #6,mt_counter
  759.     bne.s    mt_notsix
  760.     clr.w    mt_counter
  761.     bra    mt_rout2
  762.  
  763. mt_notsix:
  764.     lea    mt_aud1temp(PC),a6
  765.     tst.b    3(a6)
  766.     beq.s    mt_arp1
  767.     lea    $dff0a0,a5        
  768.     bsr.s    mt_arprout
  769. mt_arp1:lea    mt_aud2temp(PC),a6
  770.     tst.b    3(a6)
  771.     beq.s    mt_arp2
  772.     lea    $dff0b0,a5
  773.     bsr.s    mt_arprout
  774. mt_arp2:lea    mt_aud3temp(PC),a6
  775.     tst.b    3(a6)
  776.     beq.s    mt_arp3
  777.     lea    $dff0c0,a5
  778.     bsr.s    mt_arprout
  779. mt_arp3:lea    mt_aud4temp(PC),a6
  780.     tst.b    3(a6)
  781.     beq.s    mt_arp4
  782.     lea    $dff0d0,a5
  783.     bra.s    mt_arprout
  784. mt_arp4:rts
  785.  
  786. mt_arprout:
  787.     move.b    2(a6),d0
  788.     and.b    #$0f,d0
  789.     tst.b    d0
  790.     beq    mt_arpegrt
  791.     cmp.b    #$01,d0
  792.     beq.s    mt_portup
  793.     cmp.b    #$02,d0
  794.     beq.s    mt_portdwn
  795.     cmp.b    #$0a,d0
  796.     beq.s    mt_volslide
  797.     rts
  798.  
  799. mt_portup:
  800.     moveq    #0,d0
  801.     move.b    3(a6),d0
  802.     sub.w    d0,22(a6)
  803.     cmp.w    #$71,22(a6)
  804.     bpl.s    mt_ok1
  805.     move.w    #$71,22(a6)
  806. mt_ok1:    move.w    22(a6),6(a5)
  807.     rts
  808.  
  809. mt_portdwn:
  810.     moveq    #0,d0
  811.     move.b    3(a6),d0
  812.     add.w    d0,22(a6)
  813.     cmp.w    #$538,22(a6)
  814.     bmi.s    mt_ok2
  815.     move.w    #$538,22(a6)
  816. mt_ok2:    move.w    22(a6),6(a5)
  817.     rts
  818.  
  819. mt_volslide:
  820.     moveq    #0,d0
  821.     move.b    3(a6),d0
  822.     lsr.b    #4,d0
  823.     tst.b    d0
  824.     beq.s    mt_voldwn
  825.     add.w    d0,18(a6)
  826.     cmp.w    #64,18(a6)
  827.     bmi.s    mt_ok3
  828.     move.w    #64,18(a6)
  829. mt_ok3:    move.w    18(a6),8(a5)
  830.     rts
  831. mt_voldwn:
  832.     moveq    #0,d0
  833.     move.b    3(a6),d0
  834.     and.b    #$0f,d0
  835.     sub.w    d0,18(a6)
  836.     bpl.s    mt_ok4
  837.     clr.w    18(a6)
  838. mt_ok4:    move.w    18(a6),8(a5)
  839.     rts
  840.  
  841. mt_arpegrt:
  842.     move.w    mt_counter(PC),d0
  843.     cmp.w    #1,d0
  844.     beq.s    mt_loop2
  845.     cmp.w    #2,d0
  846.     beq.s    mt_loop3
  847.     cmp.w    #3,d0
  848.     beq.s    mt_loop4
  849.     cmp.w    #4,d0
  850.     beq.s    mt_loop2
  851.     cmp.w    #5,d0
  852.     beq.s    mt_loop3
  853.     rts
  854.  
  855. mt_loop2:
  856.     moveq    #0,d0
  857.     move.b    3(a6),d0
  858.     lsr.b    #4,d0
  859.     bra.s    mt_cont
  860. mt_loop3:
  861.     moveq    #$00,d0
  862.     move.b    3(a6),d0
  863.     and.b    #$0f,d0
  864.     bra.s    mt_cont
  865. mt_loop4:
  866.     move.w    16(a6),d2
  867.     bra.s    mt_endpart
  868. mt_cont:
  869.     add.w    d0,d0
  870.     moveq    #0,d1
  871.     move.w    16(a6),d1
  872.     and.w    #$fff,d1
  873.     lea    mt_arpeggio(PC),a0
  874. mt_loop5:
  875.     move.w    (a0,d0),d2
  876.     cmp.w    (a0),d1
  877.     beq.s    mt_endpart
  878.     addq.l    #2,a0
  879.     bra.s    mt_loop5
  880. mt_endpart:
  881.     move.w    d2,6(a5)
  882.     rts
  883.  
  884. mt_rout2:
  885.     lea    data,a0
  886.     move.l    a0,a3
  887.     add.l    #$0c,a3
  888.     move.l    a0,a2
  889.     add.l    #$3b8,a2
  890.     add.l    #$43c,a0
  891.     move.l    mt_partnrplay(PC),d0
  892.     moveq    #0,d1
  893.     move.b    (a2,d0),d1
  894.     asl.l    #8,d1
  895.     asl.l    #2,d1
  896.     add.l    mt_partnote(PC),d1
  897.     move.l    d1,mt_partpoint
  898.     clr.w    mt_dmacon
  899.  
  900.     lea    $dff0a0,a5
  901.     lea    mt_aud1temp(PC),a6
  902.     bsr    mt_playit
  903.     lea    $dff0b0,a5
  904.     lea    mt_aud2temp(PC),a6
  905.     bsr    mt_playit
  906.     lea    $dff0c0,a5
  907.     lea    mt_aud3temp(PC),a6
  908.     bsr    mt_playit
  909.     lea    $dff0d0,a5
  910.     lea    mt_aud4temp(PC),a6
  911.     bsr    mt_playit
  912.     move.w    #$01f4,d0
  913. mt_rls:    dbf    d0,mt_rls
  914.  
  915.     move.w    #$8000,d0
  916.     or.w    mt_dmacon,d0
  917.     move.w    d0,$dff096
  918.  
  919.     lea    mt_aud4temp(PC),a6
  920.     cmp.w    #1,14(a6)
  921.     bne.s    mt_voice3
  922.     move.l    10(a6),$dff0d0
  923.     move.w    #1,$dff0d4
  924. mt_voice3:
  925.     lea    mt_aud3temp(PC),a6
  926.     cmp.w    #1,14(a6)
  927.     bne.s    mt_voice2
  928.     move.l    10(a6),$dff0c0
  929.     move.w    #1,$dff0c4
  930. mt_voice2:
  931.     lea    mt_aud2temp(PC),a6
  932.     cmp.w    #1,14(a6)
  933.     bne.s    mt_voice1
  934.     move.l    10(a6),$dff0b0
  935.     move.w    #1,$dff0b4
  936. mt_voice1:
  937.     lea    mt_aud1temp(PC),a6
  938.     cmp.w    #1,14(a6)
  939.     bne.s    mt_voice0
  940.     move.l    10(a6),$dff0a0
  941.     move.w    #1,$dff0a4
  942. mt_voice0:
  943.     move.l    mt_partnote(PC),d0
  944.     add.l    #$10,d0
  945.     move.l    d0,mt_partnote
  946.     cmp.l    #$400,d0
  947.     bne.s    mt_stop
  948. mt_higher:
  949.     clr.l    mt_partnote
  950.     addq.l    #1,mt_partnrplay
  951.     moveq    #0,d0
  952.     move.w    mt_maxpart(PC),d0
  953.     move.l    mt_partnrplay(PC),d1
  954.     cmp.l    d0,d1
  955.     bne.s    mt_stop
  956.     clr.l    mt_partnrplay
  957. mt_stop:tst.w    mt_status
  958.     beq.s    mt_stop2
  959.     clr.w    mt_status
  960.     bra.s    mt_higher
  961. mt_stop2:
  962.     rts
  963.  
  964. mt_playit:
  965.     move.l    (a0,d1.l),(a6)
  966.     move.l    (a0,d1.l),24(a6)
  967.     addq.l    #4,d1
  968.     moveq    #0,d2
  969.     move.b    2(a6),d2
  970.     and.b    #$f0,d2
  971.     lsr.b    #4,d2
  972.  
  973.     move.b    (a6),d0
  974.     and.b    #$f0,d0
  975.     or.b    d0,d2
  976.     tst.b    d2
  977.     beq.s    mt_nosamplechange
  978.  
  979.     moveq    #0,d3
  980.     lea    mt_samples(PC),a1
  981.     move.l    d2,d4
  982.     asl.l    #2,d2
  983.     mulu    #$1e,d4
  984.     move.l    (a1,d2),4(a6)
  985.     move.w    (a3,d4.l),8(a6)
  986.     move.w    2(a3,d4.l),18(a6)
  987.     move.w    4(a3,d4.l),d3
  988.     tst.w    d3
  989.     beq.s    mt_displace
  990.     move.l    4(a6),d2
  991.     add.l    d3,d2
  992.     move.l    d2,4(a6)
  993.     move.l    d2,10(a6)
  994.     move.w    6(a3,d4.l),8(a6)
  995.     move.w    6(a3,d4.l),14(a6)
  996.     move.w    18(a6),8(a5)
  997.     bra.s    mt_nosamplechange
  998.  
  999. mt_displace:
  1000.     move.l    4(a6),d2
  1001.     add.l    d3,d2
  1002.     move.l    d2,10(a6)
  1003.     move.w    6(a3,d4.l),14(a6)
  1004.     move.w    18(a6),8(a5)
  1005. mt_nosamplechange:
  1006.     move.w    (a6),d0
  1007.     and.w    #$fff,d0
  1008.     tst.w    d0
  1009.     beq.s    mt_retrout
  1010.     move.w    (a6),16(a6)
  1011.     move.w    20(a6),$dff096
  1012.     move.l    4(a6),(a5)
  1013.     move.w    8(a6),4(a5)
  1014.     move.w    (a6),d0
  1015.     and.w    #$fff,d0
  1016.     move.w    d0,6(a5)
  1017.     move.w    20(a6),d0
  1018.     or.w    d0,mt_dmacon
  1019.  
  1020. mt_retrout:
  1021.     tst.w    (a6)
  1022.     beq.s    mt_nonewper
  1023.     move.w    (a6),22(a6)
  1024.  
  1025. mt_nonewper:
  1026.     move.b    2(a6),d0
  1027.     and.b    #$0f,d0
  1028.     cmp.b    #$0b,d0
  1029.     beq.s    mt_posjmp
  1030.     cmp.b    #$0c,d0
  1031.     beq.s    mt_setvol
  1032.     cmp.b    #$0d,d0
  1033.     beq.s    mt_break
  1034.     cmp.b    #$0e,d0
  1035.     beq.s    mt_setfil
  1036.     cmp.b    #$0f,d0
  1037.     beq.s    mt_setspeed
  1038.     rts
  1039.  
  1040. mt_posjmp:
  1041.     not.w    mt_status
  1042.     moveq    #0,d0
  1043.     move.b    3(a6),d0
  1044.     subq.b    #1,d0
  1045.     move.l    d0,mt_partnrplay
  1046.     rts
  1047.  
  1048. mt_setvol:
  1049.     move.b    3(a6),8(a5)
  1050.     rts
  1051.  
  1052. mt_break:
  1053.     not.w    mt_status
  1054.     rts
  1055.  
  1056. mt_setfil:
  1057.     moveq    #0,d0
  1058.     move.b    3(a6),d0
  1059.     and.b    #1,d0
  1060.     rol.b    #1,d0
  1061.     and.b    #$fd,$bfe001
  1062.     or.b    d0,$bfe001
  1063.     rts
  1064.  
  1065. mt_setspeed:
  1066.     move.b    3(a6),d0
  1067.     and.b    #$0f,d0
  1068.     beq.s    mt_back
  1069.     clr.w    mt_counter
  1070.     move.b    d0,mt_cool+3
  1071. mt_back:rts
  1072.  
  1073. mt_aud1temp:
  1074.     dcb.w    10,0
  1075.     dc.w    1
  1076.     dcb.w    2,0
  1077.     dc.w    0
  1078. mt_aud2temp:
  1079.     dcb.w    10,0
  1080.     dc.w    2
  1081.     dcb.w    2,0
  1082.     dc.w    0
  1083. mt_aud3temp:
  1084.     dcb.w    10,0
  1085.     dc.w    4
  1086.     dcb.w    2,0
  1087.     dc.w    0
  1088. mt_aud4temp:
  1089.     dcb.w    10,0
  1090.     dc.w    8
  1091.     dcb.w    2,0
  1092.     dc.w    0
  1093.  
  1094. mt_partnote:    dc.l    0
  1095. mt_partnrplay:    dc.l    0
  1096. mt_counter:    dc.w    0
  1097. mt_partpoint:    dc.l    0
  1098. mt_samples:    dc.l    0
  1099. mt_sample1:    dcb.l    31,0
  1100. mt_maxpart:    dc.w    0
  1101. mt_dmacon:    dc.w    0
  1102. mt_status:    dc.w    0
  1103.  
  1104. mt_arpeggio:
  1105.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  1106.     dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  1107.     dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  1108.     dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  1109.     dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  1110.  
  1111.  
  1112.  
  1113.     * M-00001111 10111000       *
  1114.     *****************************
  1115.  
  1116.  
  1117.     **************************
  1118.     *Gets new notes for spec and displays all
  1119.     *a0,a1,a2,a3
  1120.     *d0,d1
  1121.     **************************
  1122.  
  1123. Dospec:
  1124.     ;move.w    #$00f0,specol+2
  1125.     jsr    getspec
  1126.     moveq.l    #0,d0
  1127. .lp5:    lea    spech,a0
  1128.     tst.b    (a0,d0)
  1129.     beq    .lp4
  1130.     move.l    pln1,a1
  1131.     add.l    #253*40,a1
  1132.     add.l    #2,a1
  1133.     moveq.l    #0,d1
  1134.     move.b    (a0,d0),d1
  1135.     mulu.w    #80,d1
  1136.     sub.l    d1,a1
  1137.     move.b    #0,(a1,d0)
  1138.     add.l    #80,a1
  1139. .lp2:    move.b    #%11111110,(a1,d0)
  1140.     add.l    #80,a1
  1141.     sub.l    #80,d1
  1142.     bne    .lp2
  1143.     sub.b    #1,(a0,d0)
  1144.     
  1145. .lp4:    lea    spect,a0
  1146.     tst.b    (a0,d0)
  1147.     beq    .lp3
  1148.     move.l    pln1,a1
  1149.     add.l    #253*40,a1
  1150.     add.l    #2,a1
  1151.     moveq.l    #0,d1
  1152.     move.b    (a0,d0),d1
  1153.     mulu.w    #80,d1
  1154.     sub.l    d1,a1
  1155.     move.b    #0,(a1,d0)
  1156.     move.b    #%11111110,80(a1,d0)
  1157.     lea    spech,a0
  1158.     tst.b    (a0,d0)
  1159.     bne    .lp3
  1160.     lea    spect,a0
  1161.     sub.b    #1,(a0,d0)
  1162. .lp3:    add.l    #1,d0
  1163.     cmp.l    #36,d0
  1164.     bne    .lp5
  1165.     rts
  1166.     even
  1167.     
  1168.     *************************
  1169.     *Get info and put into spec
  1170.     *chngx sample number.b
  1171.     *fchngx pointer to frequ of note.b
  1172.     *a0,a1,a2,a3
  1173.     *d0,d1
  1174.     *************************
  1175.  
  1176. getspec:
  1177.     lea    mt_arpeggio,a0
  1178.     move.w    mt_aud1temp,d1
  1179.     jsr    aspect
  1180.     move.w    #1,mt_aud1temp
  1181.     lea    mt_arpeggio,a0
  1182.     move.w    mt_aud2temp,d1
  1183.     jsr    aspect
  1184.     move.w    #1,mt_aud2temp
  1185.     lea    mt_arpeggio,a0
  1186.     move.w    mt_aud3temp,d1
  1187.     jsr    aspect
  1188.     move.w    #1,mt_aud3temp
  1189.     lea    mt_arpeggio,a0
  1190.     move.w    mt_aud4temp,d1
  1191.     jsr    aspect
  1192.     move.w    #1,mt_aud4temp
  1193.     rts
  1194.     
  1195. aspect    move.l    #0,d0
  1196. .lp:    cmp.w    (a0)+,d1
  1197.     beq    .lp2
  1198.     add.l    #1,d0
  1199.     cmp.l    #36,d0
  1200.     bne    .lp
  1201.     rts
  1202.  
  1203. .lp2:    
  1204.     lea    spech,a0
  1205.     move.b    #16,(a0,d0)
  1206.     lea    spect,a0
  1207.     move.b    #16,(a0,d0)
  1208.  
  1209.     sub.l    #1,d0
  1210.     bmi    .lp7
  1211.     lea    spech,a0
  1212.     add.b    #4,(a0,d0)
  1213.     cmp.b    #16,(a0,d0)
  1214.     ble    .lp6
  1215.     move.b    #16,(a0,d0)
  1216. .lp6:    move.b    (a0,d0),d1
  1217.     lea    spect,a0
  1218.     cmp.b    (a0,d0),d1
  1219.     ble    .lp7
  1220.     move.b    d1,(a0,d0)
  1221.  
  1222. .lp7:    add.l    #2,d0
  1223.     cmp.l    #36,d0
  1224.     beq    .lp8
  1225. .lp4:    lea    spech,a0
  1226.     add.b    #4,(a0,d0)
  1227.     cmp.b    #16,(a0,d0)
  1228.     ble    .lp5
  1229.     move.b    #16,(a0,d0)
  1230. .lp5:    move.b    (a0,d0),d1
  1231.     lea    spect,a0
  1232.     cmp.b    (a0,d0),d1
  1233.     ble    .lp8
  1234.     move.b    d1,(a0,d0)
  1235. .lp8:    rts
  1236.     
  1237. spech:    rept    36
  1238.     dc.b    1
  1239.     endr
  1240. spect:    rept    36
  1241.     dc.b    1
  1242.     endr
  1243. chng0:    dc.b    0    
  1244. fchng0:    dc.b    0    
  1245. chng1:    dc.b    0    
  1246. fchng1:    dc.b    0    
  1247. chng2:    dc.b    0    
  1248. fchng2:    dc.b    0    
  1249. chng3:    dc.b    0    
  1250. fchng3:    dc.b    0    
  1251.     even
  1252. cbar1:    dc.l    0
  1253. cbar2:    dc.l    0
  1254. cbar3:    dc.l    0
  1255. cbar4:    dc.l    0
  1256.  
  1257. Docbars:
  1258.     jsr    chkchans
  1259.  
  1260.     lea    cbar1,a0
  1261.     lea    bar1,a1
  1262.  
  1263.     moveq.l    #3,d4
  1264. .lp2:    moveq.l    #6,d0
  1265.     move.l    (a0)+,d1
  1266.     asl.l    #3,d1
  1267.     move.b    #$31,d2
  1268.     move.b    #$39,d3
  1269.  
  1270.     add.b    d1,d2
  1271.     add.b    d1,d3
  1272.  
  1273. .lp:    move.b    d2,9(a1)
  1274.     move.b    d3,17(a1)
  1275.  
  1276.     add.l    #24,a1
  1277.     dbra    d0,.lp
  1278.     dbra    d4,.lp2
  1279.     rts
  1280.  
  1281. chkchans:
  1282.     move.w    mt_aud1temp+24,d0
  1283.     cmp.w    #0,d0
  1284.     beq    .lp
  1285.     move.w    #0,mt_aud1temp+24
  1286.     move.l    #22,cbar1
  1287. .lp:
  1288.     move.w    mt_aud2temp+24,d0
  1289.     cmp.w    #0,d0
  1290.     beq    .lp2
  1291.     move.w    #0,mt_aud2temp+24
  1292.     move.l    #22,cbar2
  1293. .lp2:
  1294.     move.w    mt_aud3temp+24,d0
  1295.     cmp.w    #0,d0
  1296.     beq    .lp3
  1297.     move.w    #0,mt_aud3temp+24
  1298.     move.l    #22,cbar3
  1299. .lp3:
  1300.     move.w    mt_aud4temp+24,d0
  1301.     cmp.w    #0,d0
  1302.     beq    .lp4
  1303.     move.w    #0,mt_aud4temp+24
  1304.     move.l    #22,cbar4
  1305. .lp4:    
  1306.     tst.l    cbar1
  1307.     beq    .lp5
  1308.     sub.l    #1,cbar1
  1309. .lp5:
  1310.     tst.l    cbar2
  1311.     beq    .lp6
  1312.     sub.l    #1,cbar2
  1313. .lp6:
  1314.     tst.l    cbar3
  1315.     beq    .lp7
  1316.     sub.l    #1,cbar3
  1317. .lp7:
  1318.     tst.l    cbar4
  1319.     beq    .lp8
  1320.     sub.l    #1,cbar4
  1321. .lp8:    rts
  1322.  
  1323.     even
  1324.  
  1325. pause:    dc.l    0
  1326. messcount:
  1327.     dc.l    0
  1328. pixcount:
  1329.     dc.l    4
  1330.  
  1331. scroller:
  1332.     tst.l    pause
  1333.     beq    .lp
  1334.     sub.l    #1,pause
  1335.     rts
  1336.  
  1337. .lp:    
  1338.     ;move.w    #$0fff,$dff180
  1339.     move.l    pln1,d0
  1340.     add.l    #7520-40,d0
  1341.     move.l    d0,d1
  1342.     add.l    #2,d1
  1343.     move.l    d0,a0
  1344.     move.b    #0,39(a0)
  1345.  
  1346.     move.l    d1,$dff050    ;a source IM
  1347.     move.l    d0,$dff054    ;d source
  1348.     move.w    #$0000,$dff064    ;a mod
  1349.     move.w    #$0000,$dff066    ;d mod
  1350.     move.w    #$ffff,$dff044    ;fw mask
  1351.     move.w    #$ffff,$dff046    ;lw mask
  1352.     move.w    #%1110100111110000,$dff040    ;con0
  1353.     move.w    #%0000000000000000,$dff042    ;con1
  1354.     move.w    #%0000000111010100,$dff058    ;size        
  1355.     ;move.w    #$0000,$dff180
  1356.  
  1357.     sub.l    #1,pixcount
  1358.     bne    .lp2
  1359.  
  1360. .lp4:    move.l    pln1,a0
  1361.     add.l    #7559,a0
  1362.     lea    message,a1
  1363.     add.l    messcount,a1
  1364.     moveq.l    #0,d0
  1365.     move.b    (a1),d0
  1366.     bmi    .lp5
  1367.     tst.b    d0
  1368.     bne    .lp3
  1369.     move.l    #0,messcount
  1370.     bra    .lp4
  1371. .lp3:    sub.b    #32,d0
  1372.     add.l    #chars,d0
  1373.     move.l    d0,a1
  1374.          
  1375.     move.b    (a1),(a0)
  1376.     move.b    66(a1),40(a0)
  1377.     move.b    132(a1),80(a0)
  1378.     move.b    198(a1),120(a0)
  1379.     move.b    264(a1),160(a0)
  1380.     move.b    330(a1),200(a0)
  1381.  
  1382.     add.l    #1,messcount
  1383.     move.l    #4,pixcount
  1384.  
  1385. .lp2:    rts
  1386. .lp5:    move.l    #1,pixcount
  1387.     move.l    #200,pause
  1388.     add.l    #1,messcount
  1389.     rts
  1390.  
  1391.  
  1392.  
  1393.  
  1394.